package com.dc.diffutil

import android.os.Bundle
import android.text.TextUtils
import androidx.recyclerview.widget.DiffUtil

class AsyncDifferItemCallback: DiffUtil.ItemCallback<UserBean>() {

    /**
     * 返回true会执行areContentsTheSame继续比较
     * 返回false表示不同数据，直接更新Item的数据
     */
    override fun areItemsTheSame(oldItem: UserBean, newItem: UserBean): Boolean {
        return oldItem.id == newItem.id
    }

    /**
     * 返回true表示旧数据和新数据一样，Item数据不需进行刷新
     * 返回false表示数据有改动，会执行getChangePayload（可选），如果不覆写会执行getChangePayload则是整个item刷新，如果覆写getChangePayload可以实现控件级别的刷新
     */
    override fun areContentsTheSame(oldItem: UserBean, newItem: UserBean): Boolean {
        if (!TextUtils.equals(oldItem.name, newItem.name)) {
            return false
        }
        if (!TextUtils.equals(oldItem.job, newItem.job)) {
            return false
        }
        return true
    }

    /**
     * 如果
     */
    override fun getChangePayload(oldItem: UserBean, newItem: UserBean): Any? {
        val bundle = Bundle()
        if (!TextUtils.equals(oldItem.name, newItem.name)) {
            bundle.putString("name", newItem.name)
        }
        if (!TextUtils.equals(oldItem.job, newItem.job)) {
            bundle.putString("job", newItem.job)
        }
        return bundle
    }
}